///////////////////////////////////////////////////////////////////////////////////
// 附件调用接口封装
//开发人：虞胜强
//开发时间：2019/3/7
///////////////////////////////////////////////////////////////////////////////////
layui.define(['jquery','dialog','upload','baseutil','validUtil'],function(exports){
    var $ = layui.jquery,
        dialog = layui.dialog,
        validUtil = layui.validUtil,
        upload = layui.upload,
        baseutil = layui.baseutil;


    var fileUtil = {
        /**
         * 附件查询接口
         *
         * @param objectId 附件objectId
         * @param successFn 成功回调
         * @author shengQiang yu
         * @date 2019-03-07 11:25
         */
        acceptFile: function (objectId, successFn) {
            baseutil.post("/sysFile/list", {objectId: objectId}, successFn);
        },
        /**
         * 单附件弹窗上传
         *
         * @param objectId 绑定的对象Id
         * @param catalog 上传图片目录位置
         * @param objectValue 默认object值
         */
        singleFileUpload: function (objectId,successFn,title) {
           if (validUtil.isEmpty(title)) {
               title = "附件上传";
             };
            if (objectId == null || objectId == "") {
                objectId = new Date().getTime() + baseutil.acceptRandom(8);
            }
            dialog.popUpPage(title,"/base/sysFile/singleFileUpload?objectId="+objectId,'450px','320px', function (layer, index) {
                var body = layer.getChildFrame('body', index);
                body.find("#save").bind("click", function () {
                    var result=body.find("#result").val();
                    if(typeof successFn=='function'){
                        successFn(result);
                    }
                    parent.layer.close(index);
                    location.reload();
                });
                body.find("#cancel").bind("click", function () {
                    parent.layer.close(index);
                });
            });
        },
        /**
         * 单张图片
         *
         * @param objectId 绑定的对象Id
         * @param catalog 上传图片目录位置
         * @param objectValue 默认object值
         */
        uploadImage: function (objectId,catalog,objectValue) {
            //第一步：初始化数据
            var htmlContent='<input type="hidden" name="'+objectId+'" value="'+objectValue+'" />'+
                '<div class="close hide" onClick="event.cancelBubble = true"><i class="iconfont FS12">&#xe937;</i></div>' +
                '<img src="" style="display: none;width: 100%;height: 100%;"/>'+
                '<div class="btnctn">'+
                // '<i class="iconfont">&#xe6b9;</i><br>'+
                '</div>';
            var elem=$("#"+objectId);
            elem.html(htmlContent);
            //第二步：设置默认对象值
            if (objectValue != null && objectValue != "") {
                //设置默认附件
                fileUtil.acceptFile(objectValue,function (result) {
                    if(result.data!=null&&result.data.length>0){
                        fileUtil.uploadImageShow(elem,$("#"+objectId+" input[name='" +objectId+ "']"),result.data[0]);
                    }

                })
            }
            //第三步：设置事件
            upload.render({
                elem:elem //绑定元素
                , url: '/sysFile/singleImage' //上传接口
                , data:  {catalog: catalog}
                , done: function (result) {
                    if (0 === result.code) {
                        fileUtil.uploadImageShow(elem,$("#"+objectId+" input[name='" +objectId+ "']"),result.data);
                    } else {
                        dialog.msg(result.msg);
                    }
                }
                , error: function () {
                    //请求异常回调
                    dialog.msg("请求异常");
                }
            });
        },
        /**
         * 单张图片显示（用于单图片上传）
         *
         * @param elem 操作对象
         * @param showObj 图片展示内容
         * @param data 图片数据
         */
        uploadImageShow: function (elem,showObj,data) {
            var imgObj = $(elem).find("img");
            imgObj.attr("src", "/sysFile/showFileByPath?path="+data.path);
            showObj.val(data.objectId);
            imgObj.show();
            imgObj.hover(function () {
                $(elem).find(".close").show();
            });
            imgObj.mouseout(function () {
                $(elem).find(".close").hide();
            });
            imgObj.mouseover(function () {
                $(elem).find(".close").show();
                $(elem).find(".close").mouseover(function () {
                    $(elem).find(".close").show();
                });
                $(elem).find(".close").click(function () {
                    var objectId = showObj.val();
                    if (objectId != null && objectId != "") {
                        dialog.confirm('您确定要删除该附件吗',function () {
                            baseutil.post("/sysFile/deleteByobjectId", {objectId: objectId}, function (result) {
                                if (0 == result.code) {
                                    imgObj.hide();
                                    showObj.val('');
                                    $(elem).find(".close").hide();
                                    $(elem).find(".btnctn").show();
                                } else {
                                    top.layer.msg(result.msg);
                                }
                            });
                        });
                    } else {
                        $(elem).find(".close").hide();
                        imgObj.hide();
                        $(elem).find(".btnctn").show();
                    }

                })
            });
            $(elem).find(".btnctn").hide();
        },
        /**
         * 多附件上传展示
         *
         * @param objectId 展示附件id
         * @param objectValue objectValue的默认值
         */
        uploadMultiFileShow: function (objectId,objectValue) {
            //第一步：初始化附件内容
            $("#"+objectId).html('<button type="button" class="layui-btn moreFileList-btn-normal fileMore" style="cursor:default;">' +
                '<span class="iconfont FS15 base-color-bule marr8">&#xe7e2;</span>附件展示</button>'+
                '<input type="hidden" value="'+objectValue+'" name="'+objectId+'"/>'+
                '<div class="layui-upload-list moreFileList"><ul class="fileShow"></ul></div>');
            //第二步：设置默认对象值
            var demoListView = $("#"+objectId).find(".fileShow");
            if (objectValue == null || objectValue == "") {
            }else{
                //设置默认附件
                fileUtil.acceptFile(objectValue,function (result) {
                    if(result.data!=null&&result.data.length>0){
                        result.data.forEach(function(data){
                            fileUtil.uploadMultiFileText(objectId,data,"",2);
                        });
                    }
                })
            }
        },
        /**
         * 多附件上传
         *
         * @param objectId 展示附件id
         * @param catalog 上传图片目录位置
         * @param objectValue objectValue的默认值
         */
        uploadMultiFile: function (objectId,catalog,objectValue) {
            //第一步：初始化附件内容
            $("#"+objectId).html('<button type="button" class="layui-btn moreFileList-btn-normal fileMore">' +
                '<span class="iconfont FS15 base-color-bule marr8">&#xe7e2;</span>选择多文件</button>'+
                '<input type="hidden" value="'+objectValue+'" name="'+objectId+'"/>'+
                '<div class="layui-upload-list moreFileList"><ul class="fileShow"></ul></div>');
            //第二步：设置默认对象值
            var demoListView = $("#"+objectId).find(".fileShow");
            if (objectValue == null || objectValue == "") {
                objectValue = new Date().getTime() + baseutil.acceptRandom(8);
            }else{
                //设置默认附件
                fileUtil.acceptFile(objectValue,function (result) {
                    if(result.data!=null&&result.data.length>0){
                        result.data.forEach(function(data){
                            fileUtil.uploadMultiFileText(objectId,data,"",1);
                        });
                    }
                })
            }
            var elem=$("#"+objectId).find(".fileMore");
            //第三步：设置操作对象
            var uploadListIns = upload.render({
                elem: elem
                , url: '/sysFile/singleFile'
                , accept: 'file'
                , multiple: true
                , data: {catalog: catalog, objectId: objectValue}
                , auto: true
                , allDone: function (obj) {
                    //当文件全部被提交后，才触发
                    $("#"+objectId+" input[name="+objectId+"]").val(objectValue);
                }
                , done: function (res, index, upload) {
                    //每个文件提交一次触发一次。详见“请求成功的回调”
                    if (res.code == 0) {
                        fileUtil.uploadMultiFileText(objectId,res.data,uploadListIns,1);
                    } else {
                        dialog.msg(res.msg);
                    }
                }
            });
        },
        /**
         * 多附件展示（用于多附件上传）
         *
         * @param objectId 展示附件id
         * @param fileData 附件对象
         * @param uploadListIns 用于附件上传的对象，进行清除值
         * @param kind 1、编辑模式，2、预览模式
         * @author shengQiang yu
         * @date 2019-03-08 16:29
         */
        uploadMultiFileText: function (objectId,fileData,uploadListIns,kind) {
            var showObj = $("#"+objectId).find(".fileShow");
            var type=baseutil.acceptFileType( fileData.extendName);
            var content='';
            if(type=="1"){
                //图片
                content='<a  class="base-color-bule" href="/sysFile/downloadById?id=' +  fileData.id+ '">下载</a>'+
                    '<a data-path="' +  fileData.path+ '"  class="base-color-bule file-show" href="javascript:void(0)">预览</a>';
            }else if(type=="2"){
                //pdf
                content='<a  class="base-color-bule" href="/sysFile/downloadById?id=' +  fileData.id+ '">下载</a>' +
                    '<a data-path="' +  fileData.path+ '"  class="base-color-bule file-show" href="javascript:void(0)">预览</a>';
            }else{
                //其他
                content='<a  class="base-color-bule" href="/sysFile/downloadById?id=' +  fileData.id+ '">下载</a>' +
                    '<a data-id=="' +  fileData.id+ '"  class="base-color-bule file-shows" href="javascript:void(0)">预览</a>';

            }
            if(kind===1){
                //编辑模式
                content+=  '<a data-id="' +  fileData.id+ '" class="base-color-red file-delete" href="javascript:void(0)">删除</a>';
            }
            var tr=$(['<li>'+
            '<span class="iconfont FS15 base-color-bule">&#xe7e2;</span>'+
            '<span>' +  fileData.fileName + '</span>'+content+
            '</li>'].join(''));
            if(kind===1){
                //删除
                tr.find('.file-delete').on('click', function () {
                    var id = $(this).attr("data-id");
                    dialog.confirm('您确定要删除该附件吗',function () {
                        baseutil.post("/sysFile/deleteById", {id: id}, function (result) {
                            if (0 == result.code) {
                                tr.remove();
                                if(uploadListIns!=null&&uploadListIns!=""){
                                    var num=showObj.find("li").length;
                                    if(num<=0){
                                        $("#"+objectId).find("input[name='"+objectId+"']").val("");
                                    }
                                    uploadListIns.config.elem.next()[0].value = ''; //清空 input file 值，以免删除后出现同名文件不可选
                                }
                            } else {
                                top.layer.msg(result.msg);
                            }
                        });
                    });
                });
            }

            /**************************************************************************************/
            //office  转成pdf
            tr.find('.file-shows').on('click', function () {
                var id = fileData.id;
                dialog.confirm('确定需要预览吗',function () {
                    baseutil.post("/sysFile/tranPdf",{id:id}, function (result) {
                        if (0 == result.code) {
                            var path = result.data;
                            window.open("/sysFile/preview?path=" + path, "_blank");
                        }else{
                            top.layer.msg(result.msg);
                        }
                    });
                });
            });
            /************************************************************************************/

            //图片预览
            tr.find('.file-show').on('click', function () {
                var path = $(this).attr("data-path");
                fileUtil.imageSingleShow(path);
            });
            showObj.append(tr);
        },
        /**
         * 单张图片展示
         *
         * @param path 路径
         */
        imageSingleShow: function (path) {
            var data=[{
                "alt": "",
                "pid":1, //图片id
                "src": "/sysFile/showFileByPath?path="+path, //原图地址
                "thumb": "" //缩略图地址
            }];
            fileUtil.imageBaseShow('',baseutil.acceptRandom(1),0,data);
        },
        /**
         * 单张图片展示（通过objectId)
         *
         * @param path 路径
         */
        imageSingleByObjectIdShow: function (objectId) {
            var data=[{
                "alt": "",
                "pid":1, //图片id
                "src": "/sysFile/showFileByObjectId?objectId="+objectId, //原图地址
                "thumb": "" //缩略图地址
            }];
            fileUtil.imageBaseShow('',baseutil.acceptRandom(1),0,data);
        },
        /**
         * 单张图片展示（通过id)
         *
         * @param path 路径
         */
        imageSingleByIdShow: function (fileId) {
            var data=[{
                "alt": "",
                "pid":1, //图片id
                "src": "/sysFile/showFileById?fileId="+fileId, //原图地址
                "thumb": "" //缩略图地址
            }];
            fileUtil.imageBaseShow('',baseutil.acceptRandom(1),0,data);
        },
        /**
         * 基础图片展示
         *
         * @param title 相册标题
         * @param id 相册id
         * @param start 初始显示的图片序号，默认0
         * @param data 图片数据，格式
         * [{
             "alt": "图片名",
             "pid": 666, //图片id
              "src": "", //原图地址
              "thumb": "" //缩略图地址
             }
           ]
         */
        imageBaseShow: function (title,id,start,data) {
            var json={
                "title":title,
                "id":id, //相册id
                "start":start, //
                "data": data
            };
            layer.photos({
                photos: json
                ,shift: 5 //0-6的选择，指定弹出图片动画类型，默认随机
            });
        }

    };
    //输出baseutil接口
    exports('fileUtil', fileUtil);
});

